package com.itany.corejava.code07_面向对象;

/**
 * @author: 石小俊
 * @date: 2023年03月07日 15:01
 * @version: 1.0
 */
public class Test08_初始化顺序 {

    public static void main(String[] args) {
        System.out.println("**************对象所在的类被加载**************");
        // 静态代码块
        // 当类被加载了,则不再加载,每个类只加载一次
        Product.salary = 1000.0;
        System.out.println("**************对象被创建**************");
        // 静态代码块、代码块
        Product product = new Product("alice");
        System.out.println("**************方法被调用**************");
        // 此时的name是alice
        // 先执行的代码块赋值为admin,后执行的构造方法,赋值为alice
        // 最终alice覆盖了admin
        product.getName();

        // 此时打印的salary是1000
        // 在执行类加载时定义的5000,被后定义的1000覆盖了
        product.getSalary();
    }
}

class Product {
    String name;
    static double salary;

    public Product(String name) {
        this.name = name;
    }

    {
        System.out.println("代码块");
        name = "admin";
    }

    static {
        System.out.println("静态代码块");
        salary = 5000.0;
    }

    public void getName() {
        System.out.println("name:" + name);
    }

    public void getSalary() {
        System.out.println("salary:" + salary);
    }

    public static void test() {
        System.out.println("静态方法,salary:" + salary);
    }
}

